package com.lqian.demo02.part2;

/**
 * 比较Statement & PrepareStatement：
 *
 * 在执行sql命令时，我们可以选择Statement & PrepareStatement对象
 * 无论多少次地使用同一个SQL命令，PreparedStatement都只对它解析和编译一次。
 * 当使用Statement对象时，每次执行一个SQL命令时，都会对它进行解析和编译。
 *1.什么是预编译？
 * sql的执行过程：
 * ① 词法和语义分析
 * ② 优化sql语句，指定执行计划
 * ③ 执行并返回结果
 * 我们把这种普通语句称作Immediate Statements。
 * select colume from table where colume=1;
 * select colume from table where colume=2;
 * 但是很多情况，我们的一条sql语句可能会反复执行，或者每次执行的时候只有个别的值不同，那么这个时候会对上面两条语句生成两个执行计划，一千次查询就需要一千个执行计划，生成执行计划非常耗费时间。
 *
 * 如果每次都需要经过上面的词法语义解析、语句优化、制定执行计划等，则效率就明显不行了，所以引出预编译功能。
 * 将这类语句中的值用占位符替代，可以视为将sql语句模板化或者说参数化，一般称这类语句叫Prepared Statements或者Parameterized Statements。
 * eg.insert into category values(null,?,?)
 * 以java为例，预编译会使用preparestatement，会对预编译语句进行语法分析，编译。
 * 那么这个时候会对上面的insert语句按照预编译语句生成一个执行计划，然后根据参数可以进行重用执行计划。
 * 当处理批量SQL语句时，这个时候就可以体现PrepareStatement的优势，
 * 、由于采用Cache机制，则预先编译的语句，就会放在Cache中，下次执行相同SQL语句时，则可以直接从Cache中取出来,效率要比statement高好几倍
 *statement使用中是静态的固定好的sql语句。而PrepareStatement则是进行动态处理更好的防止了sql注入
 *
 *JDBC的性能最大的增进是减少JDBC驱动与数据库之间的网络通讯
 *
 * @author：Melody_LQ
 * @time：2022/7/13 5:25 下午
 */
public class CompareStatementAndPrepareStatement {
}
